﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using App.Modelo;
using App.Modelo.Attributes;
using App.Persistencia;
using App.SolInf.Controlador;
using App.SolInf.Modelo;



namespace App.SolInf.Vista
{
    [Formulario("Productos", "Gestion de productos")]
    public partial class DetalleProducto : Form
    {
        private ModoFormularioABM _modo = ModoFormularioABM.Modificacion;
        private Producto _producto;
        private ControladoraProductos _controladoraProductos;

        public ControladoraProductos ControladoraProductos
        {
            get {
                return _controladoraProductos ??
                       (_controladoraProductos =
                        ModuloSolInf.Instance.FabricaControladoras.Factory<ControladoraProductos>());
            }
            set { _controladoraProductos = value; }
        }

        public ModoFormularioABM Modo
        {
            get { return _modo; }
            set
            {
                _modo = value;
                grpId.Visible = true;
                switch (_modo)
                {
                    case ModoFormularioABM.Ver:
                        toolStripButton1.Visible = false;
                        txtDescripcion.ReadOnly
                            = txtStock.ReadOnly
                            = txtEstado.ReadOnly
                            = txtGanancia.ReadOnly
                            = txtCosto.ReadOnly
                            = txtPrecio.ReadOnly
                            = txtStockMax.ReadOnly
                            = txtStockMin.ReadOnly
                            = true;

                        cmbCategoria.Enabled = cmbMarca.Enabled = false;

                        break;
                    case ModoFormularioABM.Alta:
                        grpId.Visible = false;
                        break;
                    case ModoFormularioABM.Baja:
                        break;
                    case ModoFormularioABM.Modificacion:
                        break;
                    default:
                        throw new ArgumentOutOfRangeException();
                }
            }
        }

        public Producto Producto {
            get { return _producto; }
            set { productoBindingSource.DataSource = _producto = value; }
        }

        public DetalleProducto()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            cmbMarca.DataSource = ControladoraProductos.ListarMarcas();
            cmbCategoria.DataSource = ControladoraProductos.ListarCategorias();
        }

        [Comando("alta", "Da de alta un nuevo cliente")]
        public void AltaProducto()
        {
            Producto = new Producto();
            
            Modo = ModoFormularioABM.Alta;
            Text = "Nuevo Producto";
            ModuloSolInf.Instance.AbrirFormulario(this);   
        }

        public void Modificar()
        {
            //Producto = Repositorio.GetById<Producto>(Producto.Id);
            Modo = ModoFormularioABM.Modificacion;
            Text = "Modificar Producto";
            ModuloSolInf.Instance.AbrirFormulario(this);
        }

        private void _guardarItem(object sender, EventArgs e)
        {
            try
            {

                switch (Modo)
                {
                    case ModoFormularioABM.Alta:
                        ControladoraProductos.Alta(_producto);
                        MessageBox.Show("Se guardo el nuevo producto", Text, MessageBoxButtons.OK,
                                MessageBoxIcon.Information);
                        break;
                    case ModoFormularioABM.Modificacion:
                        ControladoraProductos.Modificar(_producto);
                        MessageBox.Show("Se guardo el producto", Text, MessageBoxButtons.OK,
                                MessageBoxIcon.Information);
                        break;
                }

                Close();
            }
            catch (Exception)
            {
                throw;
            }
        }

        private void _cancelar(object sender, EventArgs e)
        {
            Close();
        }

        public void Ver()
        {
            Modo = ModoFormularioABM.Ver;
            ModuloSolInf.Instance.AbrirFormulario(this);
        }
    }    
}
